; 显示双字节无符号整数（16位）的十六进制数串，以AX作为传递参数。
    org 0100h
    mov ax, cs
    mov es, ax
    mov ds, ax
    mov ss, ax  ; 设置堆栈指针
    mov sp, 100h - 4
    call GetDigStr
    jmp $

GetDigStr:
    mov cx, 1           ; 位数=1（初值）
    mov bp, sbuf        ; BP = sbuf + dn - 1 = sbuf的当前位置
    add bp, dn - 1
    mov bx, 10h         ; 除数=16
    ; 串为8FA4
    ; mov ax, 08fa4h
    ; 串为5201
    mov ax, 05201h
DLoop:              ; 循环开始处
    mov dx, 0       ; DX=0
    div bx          ; DX:AX / BX -> 商AX、余DX
    cmp dl, 10      ; AL >= 10 ?
    jl LTT              ; AL < 10：跳转到
    add dl, 07h         ; AL >= 10：显示字母（ = 数值 += 37h）
LTT: ; less than ten
    add dl, 30h     ; 数字字符 = 数值 + 30h
    mov [bp], dl        ; sbuf[BP] = DX
    cmp ax, 0           ; 商AX = 0 ?
    je Print        ; = 0 跳出循环
    inc cx          ; 位数CX++
    dec bp          ; 数字符的当前位置BP--
    jmp DLoop       ; 继续循环
Print:
    mov al, [bp]
    mov ah, 0eh     ; 功能号
    mov bl, 0       ; 对文本方式置0
    int 10h         ; 调用10H号中断
    dec cx
    inc bp
    cmp cx, 0
    jg Print
    ret

dn equ 10000h     ; 最大位数
sbuf: db dn  ; 用于存放十六进制数字串的缓冲区

    